/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package classes;

import database.DbConnection;
import java.sql.ResultSet;
import java.util.ArrayList;

/**
 *
 * @author mrossetti
 */
public class Commessa {
    
    private int _IDCOMMESSA;
    private String _Codice_commessa;
    private String _Nome_commessa;
    private String _Note;
    private ArrayList<Commesse_Articoli> _Articoli;
    private Cliente _Cliente;
    private database.DbConnection Db;
    
    public Commessa(){
        _IDCOMMESSA = -1;
        _Codice_commessa = "";
        _Nome_commessa = "";
        _Note = "";
        _Articoli = new ArrayList<Commesse_Articoli>();
        _Cliente = new Cliente();
        Db = null;
    }
    
    public void setIDCommessa(int IDCOMMESSA){
        _IDCOMMESSA = IDCOMMESSA;
    }
    
    public int getIDCommessa(){
        return _IDCOMMESSA;
    }
    
    public void setCodiceCommessa(String Codice_commessa){
        _Codice_commessa = Codice_commessa;
    }
    
    public String getCodiceCommessa(){
        return _Codice_commessa;
    }
    
    public void setNomeCommessa(String Nome_commessa){
        _Nome_commessa = Nome_commessa;
    }
    
    public String getNomeCommessa(){
        return _Nome_commessa;
    }
    
    public void setNote(String Note){
        _Note = Note;
    }
    
    public String getNote(){
        return _Note;
    }
    
    public void setArticoli(ArrayList<Commesse_Articoli> Articoli){
        _Articoli = Articoli;
    }
    
    public ArrayList<Commesse_Articoli> getArticoli(){
        return _Articoli;
    }
    
    public void setCliente(Cliente cliente){
        _Cliente = cliente;
    }
    
    public Cliente getCliente(){
        return _Cliente;
    }
    
    public void load(){
        Db = new DbConnection();
        if(getIDCommessa() >= 0){
            ResultSet rs = Db.getResultSet("SELECT * FROM COMMESSE WHERE IDCOMMESSA = " + getIDCommessa());
            try{
                if(rs.next()){
                    setCodiceCommessa(rs.getString("codice_commessa"));
                    setNomeCommessa(rs.getString("nome_commessa"));
                    setNote(rs.getString("Note"));
                }
                rs.close();
                Db.CloseConnection();
                loadArticoli();
                loadCliente();
            }catch(Exception e){
                e.printStackTrace();
                Db.CloseConnection();
            }
        }
    }
    
    public void load(String Codice){
        Db = new DbConnection(); 
        String SQL = "SELECT * FROM COMMESSE WHERE UPPER(Codice_commessa) = '" + Codice.toUpperCase().replaceAll("'", "''") + "'";
        ResultSet rs = Db.getResultSet(SQL);
        try{
            if(rs.next()){
                setIDCommessa(rs.getInt("IDCommessa"));
                setCodiceCommessa(rs.getString("codice_commessa"));
                setNomeCommessa(rs.getString("nome_commessa"));
                setNote(rs.getString("Note"));
            }
            rs.close();
            Db.CloseConnection();
            loadArticoli();
            loadCliente();
        }catch(Exception e){
            e.printStackTrace();
            Db.CloseConnection();
        }
    }
    
    public void loadArticoli(){
        Db = new DbConnection();
        try{
            _Articoli = new ArrayList<Commesse_Articoli>();
            if(getIDCommessa() >= 0){
                ResultSet rs = Db.getResultSet("SELECT IDArticolo, qta FROM commesse_articoli WHERE IDCommessa = " + getIDCommessa());
                while(rs.next()){
                    Commesse_Articoli myArt = new Commesse_Articoli();
                    myArt.setIDArticolo(rs.getInt(1));
                    myArt.load();
                    myArt.setQta(rs.getInt(2));
                    _Articoli.add(myArt);
                }
                rs.close();
            }
            Db.CloseConnection();
        }catch(Exception e){
            e.printStackTrace();
            Db.CloseConnection();
        }
    }
    
    public void loadCliente(){
        Db = new DbConnection();
        try{
            _Cliente = new Cliente();
            if(getIDCommessa() >= 0){
                ResultSet rs = Db.getResultSet("SELECT IDCliente FROM commesse_clienti WHERE IDCommessa = " + getIDCommessa());
                if(rs.next()){
                    _Cliente.setIDCLiente(rs.getInt(1));
                    _Cliente.load();
                }
                rs.close();
            }
            Db.CloseConnection();
        }catch(Exception e){
            e.printStackTrace();
            Db.CloseConnection();
        }
    }
    
    public boolean save(){
        boolean res = false;
        Db = new DbConnection();
        String SQL = "";
        if(getIDCommessa() < 0){
            SQL = "INSERT INTO COMMESSE(codice_commessa, nome_commessa, note)";
            SQL = SQL + "VALUES('" + getCodiceCommessa().replaceAll("'", "''") + "', '" + getNomeCommessa().replaceAll("'", "''") + "', '" + getNote().replaceAll("'", "''") +"')";
        }else{
            SQL = SQL + "UPDATE COMMESSE SET ";
            SQL = SQL + "codice_commessa = '" + getCodiceCommessa().replaceAll("'", "''") + "', ";
            SQL = SQL + "nome_commessa = '" + getNomeCommessa().replaceAll("'", "''") + "', ";
            SQL = SQL + "Note = '" + getNote().replaceAll("'", "''") + "' ";
            SQL = SQL + "WHERE IDCOMMESSA = " + getIDCommessa();
        }
        if(Db.executeQuery(SQL)){
            Commessa temp = new Commessa();
            temp.load(getCodiceCommessa());
            setIDCommessa(temp.getIDCommessa());
            SQL = "DELETE FROM commesse_articoli WHERE IDCommessa = " + getIDCommessa();
            if(Db.executeQuery(SQL)){
                for(int i = 0;i<getArticoli().size();i++){
                    SQL = "INSERT INTO commesse_articoli (IDCommessa, IDArticolo, qta) VALUES(";
                    SQL = SQL + getIDCommessa() + ", " + getArticoli().get(i).getIDArticolo() + ", " + getArticoli().get(i).getQta() + ")";
                    if(!Db.executeQuery(SQL))return false;
                }
                SQL = "DELETE FROM commesse_clienti WHERE IDCommessa = " + getIDCommessa();
                if(Db.executeQuery(SQL)){
                    SQL = "INSERT INTO commesse_clienti (IDCommessa, IDCliente) VALUES (" + getIDCommessa() + ", " + getCliente().getIDCliente() + ")";
                    if(Db.executeQuery(SQL))res = true;
                }
            }
        }
        Db.CloseConnection();
        return res;
    }
    
    public boolean delete(){
        boolean res = false;
        Db = new DbConnection();
        String SQL = "DELETE FROM COMMESSE WHERE IDCOMMESSA = " + getIDCommessa();
        if(Db.executeQuery(SQL)){
            SQL = "DELETE FROM COMMESSE_ARTICOLI WHERE IDCOMMESSA = " + getIDCommessa();
            if(Db.executeQuery(SQL)){
                SQL = "DELETE FROM COMMESSE_CLIENTI WHERE IDCOMMESSA = " + getIDCommessa();
                res = true;
            }
        }
        return res;
    }
}
